"""
    案例：
        目的：演示逻辑回归相关API
        逻辑回归：
            概述：属于有监督学习， 即：有特征、有标签 且属于离散的
            它属于分类算法一种 ，一般用于二分类
        原理：
            1：基于线性回归，结合特征值，计算出标签值
            2：把上述算出来的标签值给激活函数（sigmoid），映射为[0,1]区间的值
            3：结合业务手动设置阈值，来进行分类划分
                    例如：阈值 =0.6   则
                        结果>0.6   A类
                        否则       B类
        损失函数：
            极大似然估计函数的 负数形式
"""
import pandas as pd
import numpy as np
from sklearn.linear_model import  LogisticRegression
from sklearn.model_selection import  train_test_split
from sklearn.preprocessing import  StandardScaler
#1、准备数据
data=pd.read_csv("../data/breast-cancer-wisconsin.csv")
# data.info()
#2、数据预处理
#2-1:用np.nan来替换？
data=data.replace('?',np.nan)
# data.info()

#2.2因为有缺失值 ，但是缺失值不多，删除即可 ,按行删除
#axis=0 (默认) ，按行删除
data.dropna(axis=0,inplace=True)
# data.info()
#3.特征工程
#3.1获取特征和标签
x=data.iloc[:,1:-1]

# y=data.iloc[:,-1]
# y=data.Class
y=data['Class']
#3.2查看结果
print(len(x),len(y))

#3.3拆分训练集和数据集
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=22)

#3.4数据集相差不大，可以不做标准化，但是为了让步骤更完善，
transfer=StandardScaler()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)

#4、模型训练
#4.1创建模型
es=LogisticRegression()
#4.2训练模型
es.fit(x_train,y_train)

#5、模型预测
y_predict=es.predict(x_test)

#6、模型评估
print(f"准确率{es.score(x_test,y_test)}")  #0.9854014598540146
#至此，逻辑回归入门API我们就写完了。但是我们这里做的是癌症预测。 思考：仅仅靠准确率，来衡量逻辑回归结果合适？
#肯定不行的！！！因为只知道准确率，不知道到底是哪些预测成功了，哪些预测失败了 ？所以需要进一步评估
#比如癌症预测 ， 你告诉 张三，你得癌症了。但是本次预测结果准确率只有98%
#所以我们需要加入：  混淆矩阵   ： 精确率（掌握），召回率（掌握），F1-score（掌握） ROC曲线（了解）  AUC值（了解）
